//go:build !plan9
// +build !plan9

package fsnotify

import (
	"bytes"
	"errors"
	"fmt"
)

//关于用户是否可以 初始化任务调度器
//传递参数管道 结果管道 类型都是有类型的 name 方法 调度
//这样我们进行都会初始化好队列信息 10个woker 100queue 数量
//这样我们就可以 完成 对应的处理了
//交给协程去处理
//处理结果进行等待处理
// wg.wait
// job1 job2 job3
//同时处理任务调度 都是任务 都在一个 job 中
//我们可以在job 中进行处理我们的业务本身
//go func
// go func
// go func
// job
// job
// job-job1-job2-job3
//group
//就是func 参数和 调用分离 函数签名 参数 结果 call.funcs 分离
// resolve
// reject
// catch
// then
// finaly
// 组合起来
//Event represents a single file system notification.
type Event struct {
	Name string //Relative path to the file or directory.
	Op   Op     // File Operation that triggered the evnt.
}

// Op describe a set of file operations
type Op uint32

// These are the generaalized file operations that can trigger a notification.
const (
	Create Op = 1 << iota
	Write
	Remove
	Rename
	Chmod
)

//我们可以使用
// Op uint32
// Op op
// Op uint32
// Create Op = 1<< iota
// 25 32
// op
// if op&Create == create 这样方式去 无服务器号数 不于或 去除 一处 修补 提花进位
func (op Op) String() string {
	//Use a buffer for efficient string concatenation
	// op&Create
	var buffer bytes.Buffer
	if op&Create == Create {
		buffer.WriteString("|CREATE")
	}
	if op&Remove == Remove {
		buffer.WriteString("|REMOVE")
	}
	if op&Write == Write {
		buffer.WriteString("|WRITE")
	}
	if op&Rename == Rename {
		buffer.WriteString("|RENAME")
	}
	if op&Chmod == Chmod {
		buffer.WriteString("|CHMOD")
	}
	if buffer.Len() == 0 {
		return ""
	}
	return buffer.String()[1:]
}

// String returns a string represent
// of event in the form
// file: remove|Write|Rename|...
func (e Event) String() string {
	return fmt.Sprintf("%q: %s", e.Name, e.Op.String())
}

//Common errors that can be reported by a watcher
var (
	ErrEventOverflow = errors.New("fsnotify queue overflow ")
)

//每个文件完成自己事情 单利模式 单独处理
//错误 常量 信息 事件 触发 格式化 信息输出
